For a wide variety of reasons, computing systems often keep a log of certain events. Such logs may be helpful for diagnosing emergent or existing problems, recovering from a failure of the computing system, performing incremental backup of the computing system, tracking computing performance, evaluating security, and so forth.
Some logs are persisted on disk in order to survive system failure. After all, some logs have their purpose in being used after a system failure, such as when used for recovery, or to diagnose reasons for the failure. When the log is persisted on disk, the events are often first written to a volatile log cache (often called an “LC”) in volatile memory. Each log cache is often sized so that it may be serialized and written to disk in a single I/O operation, thereby preserving use of the I/O channel with the disk. The use of such a log cache is helpful in that it reduces the number of I/O operations to disk.
Once the log cache is filled (or after a certain time has elapsed), the contents of the log cache are serialized and written to disk, and another empty log cache is made available to capture (at least in volatile memory) further events. This process is repeated, thereby cycling through a number of log caches. Once the contents of a particular log cache are confirmed as being written to the log on disk, the one or more threads that initiated writes of events into that log cache are then released back to the event provider(s). While the threads are awaiting release, they may often be put to sleep so as to reduce overhead associated with the thread.
The subject matter claimed herein is not limited to embodiments that solve any disadvantages or that operate only in environments such as those described above. Rather, this background is only provided to illustrate one exemplary technology area where some embodiments described herein may be practiced.